home *** CD-ROM | disk | FTP | other *** search
- #!/bin/sh
- # --------------------------------------------------------------------------
- # Copyright 1992 by Forschungszentrum Informatik (FZI)
- #
- # You can use and distribute this software under the terms of the licence
- # you should have received along with this program.
- # If not or if you want additional information, write to
- # Forschungszentrum Informatik, "STONE", Haid-und-Neu-Strasse 10-14,
- # D-7500 Karlsruhe 1, Germany.
- # --------------------------------------------------------------------------
- # 'sos-cmp - 27:02:91 - Dietmar Theobald'
- #
- # sos-cmp [-v] [-E] [-I] [-L <language>] <file_prefix> [<schema>]
- #
- # Interface to the SOS compiler and host language generators. A compilation is
- # carried out in two phases: In the first phase a schema file is processed and
- # an schema object as an internal representation is generated which is placed in
- # the root container. The second phase operates on this schema object and
- # produces a host language interface to the classes and types defined in the
- # schema.
- #
- # The "-v" option causes a report on the start of each compilation phase.
- #
- # The "-E" flag takes effect on the first phase by enabling an echo mode. This
- # echo is generated by the lexical analyzer module of the SOS compiler and
- # consists of the text of an token before this token is handed over to the parser
- # module. The echo mode is intended to be used in debugging the SOS compiler.
- #
- # The "-L" option specifies the host language interface to be generated. Up to
- # now there exists only a C++ binding, which is also the default.
- #
- # <file_prefix> may be:
- # "^" : The first phase is not carried out.
- # "-" : Input is read from stdin.
- # another string: Input is read from "<file_prefix>.sos".
- #
- # <schema> may be:
- # "^" : The second phase is not carried out.
- # another string: Output is generated for the named <schema>.
- # The output is written to the current working directory.
- # If <schema> is not given then <file_prefix> is also used as schema name. This
- # is not possible if <file_prefix> is "^" or "-".
- #
- BINDIR=${SOSPATH-__SOS_INSTALLED_PATH__}/bin/
-
- test="${SOSCONTAINER?}"
-
- tmpfile=/tmp/sos-cmp.$$
- language='CC'
-
- while [ $# -gt 0 ]
- do
- case $1 in
- -v) verbose='+' ;;
- -E) cfeopt='-E' ;;
- -I) genopt='-I' ;;
- -L) shift
- language="$1" ;;
- *) break ;;
- esac
- shift
- done
-
- generator="gen$language"
-
- if [ $# -eq 1 ] ; then
- [ "$1" = '^' -o "$1" = '-' ] && {
- echo >&2 '*** sos-cmp: no implicit schema name' ; exit 1
- }
- infile="$1".sos
- schema="`basename $1`"
- elif [ $# -eq 2 ] ; then
- if [ "$1" = '-' -o "$1" = '^' ] ; then
- infile="$1"
- else
- infile="$1".sos
- fi
- schema="$2"
- else
- echo >&2 '*** usage: sos-cmp [-E] [-I] [-L language] file-prefix [schema-name]'
- exit 1
- fi
-
-
- [ "$infile" != '^' ] && { [ "$verbose" ] && \
- echo 'sos-cmp: starting compilation ...'
-
- if [ $infile = '-' ] ; then
- cat - > $tmpfile
-
- ${BINDIR}cfe $cfeopt $tmpfile || { rm $tmpfile
- exit 1
- }
- rm $tmpfile
- else
- ${BINDIR}cfe $cfeopt $infile || exit 1
- fi
- }
-
- [ "$schema" != '^' ] && {
- [ "$verbose" ] && echo 'sos-cmp: starting generation ...'
-
- genfiles="${schema}_sos.c ${schema}_sos.h ${schema}_use.h"
-
- rm -f $genfiles
-
- ${BINDIR}$generator $genopt $schema || exit 1
- }
-
- exit 0
-